#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int QListDataType;


//队列的节点
typedef struct QueueNode
{
	QListDataType _Value;
	struct QueueNode* _Next;
}QNode;

typedef struct Queue
{
	//队头
	QNode* _Front;
	//队尾
	QNode* _Tail;
	int _size;
}Queue;

// 初始化队列
void QueueInit(Queue* q);

// 队尾入队列
void QueuePush(Queue* q, QListDataType data);

// 队头出队列
void QueuePop(Queue* q);

// 获取队列头部元素
QListDataType QueueFront(Queue* q);

// 获取队列队尾元素
QListDataType QueueBack(Queue* q);

// 获取队列中有效元素个数
int QueueSize(Queue* q);

// 检测队列是否为空，如果为空返回非零结果，如果非空返回0 
int QueueEmpty(Queue* q);

// 销毁队列
void QueueDestroy(Queue* q);
